package com.tangem.lib.visa;

import org.web3j.abi.EventEncoder;
import org.web3j.abi.FunctionEncoder;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.*;
import org.web3j.abi.datatypes.generated.Bytes32;
import org.web3j.abi.datatypes.generated.Bytes4;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameter;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.RemoteFunctionCall;
import org.web3j.protocol.core.methods.request.EthFilter;
import org.web3j.protocol.core.methods.response.BaseEventResponse;
import org.web3j.protocol.core.methods.response.Log;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import org.web3j.tx.gas.ContractGasProvider;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import io.reactivex.Flowable;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 1.5.2.
 */
@SuppressWarnings("rawtypes")
class TangemBridgeProcessor extends Contract {
    public static final String BINARY = "608060405262278d006008553480156200001857600080fd5b506040516200272f3803806200272f8339810160408190526200003b9162000214565b60028054600580546001600160a01b03199081166001600160a01b038a8116919091179092556006805482168984161790556001600160a81b03199092166101008783160217909255600380549091169184169190911790556009819055620000a6600033620000b2565b5050505050506200027b565b600080620000c18484620000ef565b90508015620000e6576000848152600160205260409020620000e490846200019d565b505b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000194576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200014b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620000e9565b506000620000e9565b6000620000e6836001600160a01b03841660008181526001830160205260408120546200019457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620000e9565b80516001600160a01b03811681146200020f57600080fd5b919050565b600080600080600060a086880312156200022d57600080fd5b6200023886620001f7565b94506200024860208701620001f7565b93506200025860408701620001f7565b92506200026860608701620001f7565b9150608086015190509295509295909350565b6124a4806200028b6000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c806383af133d1161015c578063c904ea39116100ce578063da90f3a011610087578063da90f3a0146105f1578063e24fd1f114610604578063e452f20d14610617578063e63ab1e91461062a578063e96ede8e14610651578063fe2208aa1461066457600080fd5b8063c904ea3914610589578063ca15c8731461059c578063cb37f3b2146105af578063d47ae89c146105c2578063d547741f146105cb578063d6d32b2a146105de57600080fd5b80639353ce4c116101205780639353ce4c146104f357806396bc563d1461051a578063978975591461052f578063a217fddf14610556578063b77c6d351461055e578063be4d18511461057657600080fd5b806383af133d146104a95780638456cb59146104bc5780639010d07c146104c457806391792d5b146104d757806391d14854146104e057600080fd5b80633f4ba83a11610200578063601c6065116101b9578063601c60651461042357806365ebf99a1461043657806370e4306e1461044957806373d3467c146104705780637f2fadb0146104835780638072a0221461049657600080fd5b80633f4ba83a146103ae5780634413e098146103b65780634b9bb0b4146103c95780634e6d8a73146103f057806356737951146104035780635c975abb1461041857600080fd5b80632f2ff15d116102525780632f2ff15d1461030e5780633013ce291461032157806336568abe1461034c57806337de81061461035f5780633d409a86146103725780633e1dbe1f1461038757600080fd5b806301ffc9a71461028f5780630f1071be146102b757806311dce771146102ce578063248a9ca3146102e35780632cc3264114610306575b600080fd5b6102a261029d366004611f47565b610677565b60405190151581526020015b60405180910390f35b6102c060085481565b6040519081526020016102ae565b6102e16102dc366004611f86565b6106a2565b005b6102c06102f1366004611fa3565b60009081526020819052604090206001015490565b6102e1610710565b6102e161031c366004611fbc565b61078a565b600354610334906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b6102e161035a366004611fbc565b6107b5565b6102e161036d366004611fa3565b6107ed565b6102c060008051602061242683398151915281565b6102c07f80578ee961742bd59ed4d7f52c856d4014970acf79709a07f09c8c279d66cbb481565b6102e161084c565b6102e16103c4366004611fec565b610881565b6102c07fc62d23620f0c241b20cdec293f57ff9c0cc09ac7c55352efe3363184cd93032281565b6102e16103fe366004612018565b61094d565b6102c06000805160206123b183398151915281565b60025460ff166102a2565b6102e1610431366004612018565b610a57565b6102e1610444366004611f86565b610c7f565b6102c07f6ac2c8b5322a929d300af17766189693ff6db6939ffe690430ad4720baf47d1c81565b6102e161047e36600461205b565b610ce5565b6102e1610491366004611fec565b610e02565b6102e16104a4366004611fa3565b610ee5565b6102e16104b7366004611fec565b610f70565b6102e161102f565b6103346104d23660046120df565b611061565b6102c060075481565b6102a26104ee366004611fbc565b611080565b6102c07f79af5a85184b45263c1b3721b9c8eb1becd98e55ade5a61da0fed18b90b8325681565b6102c060008051602061230183398151915281565b6102c07f581be84b4822abe392a3bcac0d4d656e4cd57faf2e321a32108215cdd4a8365681565b6102c0600081565b6002546103349061010090046001600160a01b031681565b600654610334906001600160a01b031681565b6102e1610597366004612101565b6110a9565b6102c06105aa366004611fa3565b6111aa565b600554610334906001600160a01b031681565b6102c060095481565b6102e16105d9366004611fbc565b6111c1565b6102e16105ec366004611fa3565b6111e6565b6102e16105ff366004611fec565b611270565b6102e161061236600461214b565b6114ed565b610334610625366004611f86565b61162e565b6102c07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6102e161065f366004612018565b61168d565b6102e1610672366004612018565b611782565b60006001600160e01b03198216635a05180f60e01b148061069c575061069c8261185c565b92915050565b6000805160206123018339815191526106ba81611891565b600680546001600160a01b0319166001600160a01b0384169081179091556040519081527f68c7b435e0ad7bfb2140fab0735300efbda206f62906049e0b35763cef67cc5e906020015b60405180910390a15050565b600a54339061071e8261189b565b6000811160405180606001604052806029815260200161244660299139906107625760405162461bcd60e51b8152600401610759919061219d565b60405180910390fd5b506000600a55600654600354610786916001600160a01b0391821691168484611946565b5050565b6000828152602081905260409020600101546107a581611891565b6107af83836119a0565b50505050565b6001600160a01b03811633146107de5760405163334bd91960e11b815260040160405180910390fd5b6107e882826119d5565b505050565b7f80578ee961742bd59ed4d7f52c856d4014970acf79709a07f09c8c279d66cbb461081781611891565b60078290556040518281527fb5aa183eb20407e22587bcd13d5c82a85835a4bd60e2a13d7c7efee3c2e9ed4890602001610704565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61087681611891565b61087e611a02565b50565b7f581be84b4822abe392a3bcac0d4d656e4cd57faf2e321a32108215cdd4a836566108ab81611891565b60405163b9603bdf60e01b8152600481018390526001600160a01b0384169063b9603bdf90602401600060405180830381600087803b1580156108ed57600080fd5b505af1158015610901573d6000803e3d6000fd5b50505050826001600160a01b03167fc8818db5b3e4e986e2f21e002090b1513e17c05a7a326c3737af624bf6ef78c48360405161094091815260200190565b60405180910390a2505050565b610955611a54565b7f6ac2c8b5322a929d300af17766189693ff6db6939ffe690430ad4720baf47d1c61097f81611891565b600061098a8561162e565b905060006007548461099c91906121e6565b604051630381b4dd60e01b815260048101879052602481018290529091506001600160a01b03831690630381b4dd90604401600060405180830381600087803b1580156109e857600080fd5b505af11580156109fc573d6000803e3d6000fd5b5050505084866001600160a01b03167fa77a4ae2cfa0139350d70cd52434d01ae72e9ec897ae89be03580f1ff00dd3d086600754604051610a47929190918252602082015260400190565b60405180910390a3505050505050565b610a5f611a54565b6000805160206123b1833981519152610a7781611891565b60408051808201909152601b81527f353130307c436f6d6d6f6e3a20616d6f756e74206973207a65726f0000000000602082015282610ac95760405162461bcd60e51b8152600401610759919061219d565b506000610ad58561162e565b6003546006546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b91906121f9565b9050838110156040518060400160405280601f81526020017f353130317c436f6d6d6f6e3a20696e73756666696369656e742066756e64730081525090610ba55760405162461bcd60e51b8152600401610759919061219d565b50600a84905560405163f89db45760e01b8152600481018690526001600160a01b0383169063f89db45790602401600060405180830381600087803b158015610bed57600080fd5b505af1158015610c01573d6000803e3d6000fd5b50505050600a546000146040518060600160405280602e81526020016123d1602e913990610c425760405162461bcd60e51b8152600401610759919061219d565b5084866001600160a01b03167fa5411d116afcb8415f0019792cccf595f94852ba82886dacbf756d9c3ce85f3f86604051610a4791815260200190565b600080516020612301833981519152610c9781611891565b600580546001600160a01b0319166001600160a01b0384169081179091556040519081527fccbdeb71dc680b2f0fd85f93e7ef0f70eda32a12b918c9715be07bb646360e5990602001610704565b610ced611a54565b600080516020612426833981519152610d0581611891565b6000610d108861162e565b9050600060075487610d2291906121e6565b6040516334284dfb60e01b8152600481018a9052602481018290526001600160801b03198816604482015261ffff8716606482015285151560848201529091506001600160a01b038316906334284dfb9060a401600060405180830381600087803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b5050505087896001600160a01b03167f92c1dbadbb7b791052341ce7c185ca37861e432438355dc3e1642b7c1287609a89600754604051610def929190918252602082015260400190565b60405180910390a3505050505050505050565b610e0a611a54565b7f79af5a85184b45263c1b3721b9c8eb1becd98e55ade5a61da0fed18b90b83256610e3481611891565b6000610e3f8461162e565b604051636df6c7d560e11b8152600481018590529091506001600160a01b0382169063dbed8faa90602401600060405180830381600087803b158015610e8457600080fd5b505af1158015610e98573d6000803e3d6000fd5b50505050836001600160a01b03167f466723bb873015d5baf515fce6b0c8df2cb154adfd8badb6bc77a620a6ef676184604051610ed791815260200190565b60405180910390a250505050565b600080516020612301833981519152610efd81611891565b6283d60082106040518060600160405280602a81526020016122d7602a913990610f3a5760405162461bcd60e51b8152600401610759919061219d565b5060088290556040518281527fdc10143650bb79cd7a92cdf792545dcc2c3b0a719bebb3d83a8a21bb8fbfc3d690602001610704565b7f581be84b4822abe392a3bcac0d4d656e4cd57faf2e321a32108215cdd4a83656610f9a81611891565b6040516306b2a38360e41b8152600481018390526001600160a01b03841690636b2a383090602401600060405180830381600087803b158015610fdc57600080fd5b505af1158015610ff0573d6000803e3d6000fd5b50505050826001600160a01b03167fcc1685e553848099cad0e11271e780371c44b5ed92a54552fbedf9f1b6b9f2478360405161094091815260200190565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61105981611891565b61087e611a7a565b60008281526001602052604081206110799083611ab7565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6110b1611a54565b6000805160206124268339815191526110c981611891565b60006110d48661162e565b90506000600754856110e691906121e6565b6040516320199e7960e21b8152600481018890526024810182905285151560448201529091506001600160a01b0383169063806679e490606401600060405180830381600087803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b5050505085876001600160a01b03167f92c1dbadbb7b791052341ce7c185ca37861e432438355dc3e1642b7c1287609a87600754604051611199929190918252602082015260400190565b60405180910390a350505050505050565b600081815260016020526040812061069c90611ac3565b6000828152602081905260409020600101546111dc81611891565b6107af83836119d5565b6000805160206123018339815191526111fe81611891565b610e1082106040518060600160405280602781526020016123ff602791399061123a5760405162461bcd60e51b8152600401610759919061219d565b5060098290556040518281527f7f63f876249f25f7856e620802edd09af38a83c9c6040fcdb37179154030831190602001610704565b611278611a54565b6000805160206123b183398151915261129081611891565b600061129b8461162e565b604051631902cad960e31b8152600481018590529091506000906001600160a01b0383169063c81656c890602401602060405180830381865afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a91906121f9565b6003546006546040516370a0823160e01b81526001600160a01b0391821660048201529293506000929116906370a0823190602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138091906121f9565b90506000821160405180606001604052806027815260200161238a60279139906113bd5760405162461bcd60e51b8152600401610759919061219d565b5060408051808201909152601f81527f353130317c436f6d6d6f6e3a20696e73756666696369656e742066756e6473006020820152828210156114135760405162461bcd60e51b8152600401610759919061219d565b50600a82905560405163e3dbffd560e01b8152600481018690526001600160a01b0384169063e3dbffd590602401600060405180830381600087803b15801561145b57600080fd5b505af115801561146f573d6000803e3d6000fd5b50505050600a546000146040518060600160405280602e81526020016123d1602e9139906114b05760405162461bcd60e51b8152600401610759919061219d565b5084866001600160a01b03167fdfab01fc691e8b69fca482c65142d1bcfeafeb9eb6e9fd5220867d7196d9476e84604051610a4791815260200190565b7fc62d23620f0c241b20cdec293f57ff9c0cc09ac7c55352efe3363184cd93032261151781611891565b6115208261189b565b306001600160a01b0316826001600160a01b031663ce1b1d436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158c9190612212565b6001600160a01b03161460405180606001604052806032815260200161235860329139906115cd5760405162461bcd60e51b8152600401610759919061219d565b506001600160a01b0383811660008181526004602090815260409182902080546001600160a01b0319169487169485179055905192835290917f0c1464e8c817204497a2076f3b466fe64093e83033c83303b0cb44001cd9b6b59101610940565b6001600160a01b03808216600090815260046020908152604080832054815160608101909252602f80835293941692831515926122a890830139906116865760405162461bcd60e51b8152600401610759919061219d565b5092915050565b611695611a54565b6000805160206124268339815191526116ad81611891565b60006116b88561162e565b9050600083156116ca576007546116cd565b60005b905060006116db82866121e6565b60405163e4d7ddb960e01b815260048101889052602481018290529091506001600160a01b0384169063e4d7ddb990604401600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505060408051888152602081018690528993506001600160a01b038b1692507f8ba3ad1bd4ff5c3d75861d56df66b7942244d700f4d4cb67df693bac78e805a29101611199565b61178a611a54565b6000805160206123b18339815191526117a281611891565b60006117ad8561162e565b60405163456575e560e01b815260048101869052602481018590529091506001600160a01b0382169063456575e590604401600060405180830381600087803b1580156117f957600080fd5b505af115801561180d573d6000803e3d6000fd5b5050505083856001600160a01b03167f6f60b80b8dcecc3741c03485554a9a35ced96ebba66405fd324caf12a16261da8560405161184d91815260200190565b60405180910390a35050505050565b60006001600160e01b03198216637965db0b60e01b148061069c57506301ffc9a760e01b6001600160e01b031983161461069c565b61087e8133611acd565b6002546040516385bb392360e01b81526001600160a01b038381166004830152610100909204909116906385bb392390602401602060405180830381865afa1580156118eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190f919061222f565b60405180606001604052806037815260200161232160379139906107865760405162461bcd60e51b8152600401610759919061219d565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526107af908590611b06565b6000806119ad8484611b69565b905080156110795760008481526001602052604090206119cd9084611bfb565b509392505050565b6000806119e28484611c10565b905080156110795760008481526001602052604090206119cd9084611c7b565b611a0a611c90565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60025460ff1615611a785760405163d93c066560e01b815260040160405180910390fd5b565b611a82611a54565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611a373390565b60006110798383611cb3565b600061069c825490565b611ad78282611080565b6107865760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610759565b6000611b1b6001600160a01b03841683611cdd565b90508051600014158015611b40575080806020019051810190611b3e919061222f565b155b156107e857604051635274afe760e01b81526001600160a01b0384166004820152602401610759565b6000611b758383611080565b611bf3576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611bab3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161069c565b50600061069c565b6000611079836001600160a01b038416611ceb565b6000611c1c8383611080565b15611bf3576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161069c565b6000611079836001600160a01b038416611d32565b60025460ff16611a7857604051638dfc202b60e01b815260040160405180910390fd5b6000826000018281548110611cca57611cca61224c565b9060005260206000200154905092915050565b606061107983836000611e25565b6000818152600183016020526040812054611bf35750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561069c565b60008181526001830160205260408120548015611e1b576000611d56600183612262565b8554909150600090611d6a90600190612262565b9050808214611dcf576000866000018281548110611d8a57611d8a61224c565b9060005260206000200154905080876000018481548110611dad57611dad61224c565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611de057611de0612275565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061069c565b600091505061069c565b606081471015611e4a5760405163cd78605960e01b8152306004820152602401610759565b600080856001600160a01b03168486604051611e66919061228b565b60006040518083038185875af1925050503d8060008114611ea3576040519150601f19603f3d011682016040523d82523d6000602084013e611ea8565b606091505b5091509150611eb8868383611ec2565b9695505050505050565b606082611ed757611ed282611f1e565b611079565b8151158015611eee57506001600160a01b0384163b155b15611f1757604051639996b31560e01b81526001600160a01b0385166004820152602401610759565b5080611079565b805115611f2e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b600060208284031215611f5957600080fd5b81356001600160e01b03198116811461107957600080fd5b6001600160a01b038116811461087e57600080fd5b600060208284031215611f9857600080fd5b813561107981611f71565b600060208284031215611fb557600080fd5b5035919050565b60008060408385031215611fcf57600080fd5b823591506020830135611fe181611f71565b809150509250929050565b60008060408385031215611fff57600080fd5b823561200a81611f71565b946020939093013593505050565b60008060006060848603121561202d57600080fd5b833561203881611f71565b95602085013595506040909401359392505050565b801515811461087e57600080fd5b60008060008060008060c0878903121561207457600080fd5b863561207f81611f71565b9550602087013594506040870135935060608701356001600160801b0319811681146120aa57600080fd5b9250608087013561ffff811681146120c157600080fd5b915060a08701356120d18161204d565b809150509295509295509295565b600080604083850312156120f257600080fd5b50508035926020909101359150565b6000806000806080858703121561211757600080fd5b843561212281611f71565b9350602085013592506040850135915060608501356121408161204d565b939692955090935050565b6000806040838503121561215e57600080fd5b823561216981611f71565b91506020830135611fe181611f71565b60005b8381101561219457818101518382015260200161217c565b50506000910152565b60208152600082518060208401526121bc816040850160208701612179565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561069c5761069c6121d0565b60006020828403121561220b57600080fd5b5051919050565b60006020828403121561222457600080fd5b815161107981611f71565b60006020828403121561224157600080fd5b81516110798161204d565b634e487b7160e01b600052603260045260246000fd5b8181038181111561069c5761069c6121d0565b634e487b7160e01b600052603160045260246000fd5b6000825161229d818460208701612179565b919091019291505056fe353230327c50726f636573736f723a206e6f207061796d656e74206163636f756e7420666f72207468652063617264353231307c50726f636573736f723a20736574746c656d656e7420706572696f6420746f6f206c6f6e67fa658e47c75a6eb0e27156b2f72e1b295c98b53e8a1d238d7ca6ea6345b34880353230307c50726f636573736f723a207061796d656e74206163636f756e74206e6f74206465706c6f79656420627920666163746f7279353230317c50726f636573736f723a207061796d656e74206163636f756e742070726f636573736f72206d69736d61746368353235307c50726f636573736f723a20726566756e64207265636f7264206e6f7420666f756e64d77cc12a543481a2b3ef8fd055979569715a10db9879cd9e664395eca3a54dff353235327c50726f636573736f723a20726566756e6420746f2070726f63657373207761736e2774207265736574353231317c50726f636573736f723a2073656375726974792064656c617920746f6f206c6f6e67a567244cad934c87b7f7e15b15dd0e75f95a76afd1916f8eab4a391410d6f278353235317c50726f636573736f723a20726566756e6420746f2070726f63657373206973207a65726fa2646970667358221220098c0e97a9ad9d3bb5cd4459c44925a6fb83295823a48d337beb3c254c7b728b64736f6c63430008160033";

    public static final String FUNC_AUTHORIZATION_PROCESSOR_ROLE = "AUTHORIZATION_PROCESSOR_ROLE";

    public static final String FUNC_BALANCE_VERIFIER_ROLE = "BALANCE_VERIFIER_ROLE";

    public static final String FUNC_DEBT_PROCESSOR_ROLE = "DEBT_PROCESSOR_ROLE";

    public static final String FUNC_DEFAULT_ADMIN_ROLE = "DEFAULT_ADMIN_ROLE";

    public static final String FUNC_FIXED_FEE_SETTER_ROLE = "FIXED_FEE_SETTER_ROLE";

    public static final String FUNC_PAUSER_ROLE = "PAUSER_ROLE";

    public static final String FUNC_PAYMENT_ACCOUNT_SETTER_ROLE = "PAYMENT_ACCOUNT_SETTER_ROLE";

    public static final String FUNC_PROPERTY_SETTER_ROLE = "PROPERTY_SETTER_ROLE";

    public static final String FUNC_REFUND_PROCESSOR_ROLE = "REFUND_PROCESSOR_ROLE";

    public static final String FUNC_SETTLEMENT_PROCESSOR_ROLE = "SETTLEMENT_PROCESSOR_ROLE";

    public static final String FUNC_FIXEDFEE = "fixedFee";

    public static final String FUNC_GETPAYMENTACCOUNT = "getPaymentAccount";

    public static final String FUNC_GETROLEADMIN = "getRoleAdmin";

    public static final String FUNC_GETROLEMEMBER = "getRoleMember";

    public static final String FUNC_GETROLEMEMBERCOUNT = "getRoleMemberCount";

    public static final String FUNC_GRANTROLE = "grantRole";

    public static final String FUNC_HASROLE = "hasRole";

    public static final String FUNC_INCREASEVERIFIEDBALANCEFOR = "increaseVerifiedBalanceFor";

    public static final String FUNC_PAUSE = "pause";

    public static final String FUNC_PAUSED = "paused";

    public static final String FUNC_PAYMENTACCOUNTFACTORY = "paymentAccountFactory";

    public static final String FUNC_PAYMENTRECEIVER = "paymentReceiver";

    public static final String FUNC_PAYMENTTOKEN = "paymentToken";

    public static final String FUNC_PROCESSAUTHORIZATION = "processAuthorization";

    public static final String FUNC_PROCESSAUTHORIZATIONCHANGE = "processAuthorizationChange";

    public static final String FUNC_PROCESSAUTHORIZATIONNOOTP = "processAuthorizationNoOtp";

    public static final String FUNC_PROCESSPENDINGREFUND = "processPendingRefund";

    public static final String FUNC_PROCESSREFUND = "processRefund";

    public static final String FUNC_PROCESSREFUNDCALLBACK = "processRefundCallback";

    public static final String FUNC_PROCESSSETTLEMENT = "processSettlement";

    public static final String FUNC_REFUNDACCOUNT = "refundAccount";

    public static final String FUNC_RENOUNCEROLE = "renounceRole";

    public static final String FUNC_REVOKEROLE = "revokeRole";

    public static final String FUNC_SAVEPENDINGREFUND = "savePendingRefund";

    public static final String FUNC_SECURITYDELAY = "securityDelay";

    public static final String FUNC_SETFIXEDFEE = "setFixedFee";

    public static final String FUNC_SETPAYMENTACCOUNT = "setPaymentAccount";

    public static final String FUNC_SETPAYMENTRECEIVER = "setPaymentReceiver";

    public static final String FUNC_SETREFUNDACCOUNT = "setRefundAccount";

    public static final String FUNC_SETSECURITYDELAY = "setSecurityDelay";

    public static final String FUNC_SETSETTLEMENTPERIOD = "setSettlementPeriod";

    public static final String FUNC_SETVERIFIEDBALANCEFOR = "setVerifiedBalanceFor";

    public static final String FUNC_SETTLEMENTPERIOD = "settlementPeriod";

    public static final String FUNC_SUPPORTSINTERFACE = "supportsInterface";

    public static final String FUNC_UNPAUSE = "unpause";

    public static final String FUNC_WRITEOFFDEBT = "writeOffDebt";

    public static final Event AUTHORIZATIONCHANGEPROCESSED_EVENT = new Event("AuthorizationChangeProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>(true) {
            }, new TypeReference<Uint256>() {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event AUTHORIZATIONPROCESSED_EVENT = new Event("AuthorizationProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>(true) {
            }, new TypeReference<Uint256>() {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event DEBTWRITEOFFPROCESSED_EVENT = new Event("DebtWriteOffProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event FIXEDFEESET_EVENT = new Event("FixedFeeSet",
            List.of(new TypeReference<Uint256>() {
            }));

    public static final Event PAUSED_EVENT = new Event("Paused",
            List.of(new TypeReference<Address>() {
            }));

    public static final Event PAYMENTACCOUNTSET_EVENT = new Event("PaymentAccountSet",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Address>() {
            }));

    public static final Event PAYMENTRECEIVERSET_EVENT = new Event("PaymentReceiverSet",
            List.of(new TypeReference<Address>() {
            }));

    public static final Event PENDINGREFUNDPROCESSED_EVENT = new Event("PendingRefundProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>(true) {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event REFUNDACCOUNTSET_EVENT = new Event("RefundAccountSet",
            List.of(new TypeReference<Address>() {
            }));

    public static final Event REFUNDPROCESSED_EVENT = new Event("RefundProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>(true) {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event ROLEADMINCHANGED_EVENT = new Event("RoleAdminChanged",
            Arrays.asList(new TypeReference<Bytes32>(true) {
            }, new TypeReference<Bytes32>(true) {
            }, new TypeReference<Bytes32>(true) {
            }));

    public static final Event ROLEGRANTED_EVENT = new Event("RoleGranted",
            Arrays.asList(new TypeReference<Bytes32>(true) {
            }, new TypeReference<Address>(true) {
            }, new TypeReference<Address>(true) {
            }));

    public static final Event ROLEREVOKED_EVENT = new Event("RoleRevoked",
            Arrays.asList(new TypeReference<Bytes32>(true) {
            }, new TypeReference<Address>(true) {
            }, new TypeReference<Address>(true) {
            }));

    public static final Event SAVEREFUNDPROCESSED_EVENT = new Event("SaveRefundProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>(true) {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event SECURITYDELAYSET_EVENT = new Event("SecurityDelaySet",
            List.of(new TypeReference<Uint256>() {
            }));

    public static final Event SETTLEMENTPERIODSET_EVENT = new Event("SettlementPeriodSet",
            List.of(new TypeReference<Uint256>() {
            }));

    public static final Event SETTLEMENTPROCESSED_EVENT = new Event("SettlementProcessed",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>(true) {
            }, new TypeReference<Uint256>() {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event UNPAUSED_EVENT = new Event("Unpaused",
            List.of(new TypeReference<Address>() {
            }));

    public static final Event VERIFIEDBALANCEINCREASEDFOR_EVENT = new Event("VerifiedBalanceIncreasedFor",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>() {
            }));

    public static final Event VERIFIEDBALANCESETFOR_EVENT = new Event("VerifiedBalanceSetFor",
            Arrays.asList(new TypeReference<Address>(true) {
            }, new TypeReference<Uint256>() {
            }));

    @Deprecated
    protected TangemBridgeProcessor(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected TangemBridgeProcessor(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected TangemBridgeProcessor(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected TangemBridgeProcessor(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static List<AuthorizationChangeProcessedEventResponse> getAuthorizationChangeProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(AUTHORIZATIONCHANGEPROCESSED_EVENT, transactionReceipt);
        ArrayList<AuthorizationChangeProcessedEventResponse> responses = new ArrayList<AuthorizationChangeProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            AuthorizationChangeProcessedEventResponse typedResponse = new AuthorizationChangeProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.fee = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static AuthorizationChangeProcessedEventResponse getAuthorizationChangeProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(AUTHORIZATIONCHANGEPROCESSED_EVENT, log);
        AuthorizationChangeProcessedEventResponse typedResponse = new AuthorizationChangeProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        typedResponse.fee = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
        return typedResponse;
    }

    public static AuthorizationProcessedEventResponse getAuthorizationProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(AUTHORIZATIONPROCESSED_EVENT, log);
        AuthorizationProcessedEventResponse typedResponse = new AuthorizationProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        typedResponse.fee = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
        return typedResponse;
    }

    public static DebtWriteOffProcessedEventResponse getDebtWriteOffProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(DEBTWRITEOFFPROCESSED_EVENT, log);
        DebtWriteOffProcessedEventResponse typedResponse = new DebtWriteOffProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static List<AuthorizationProcessedEventResponse> getAuthorizationProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(AUTHORIZATIONPROCESSED_EVENT, transactionReceipt);
        ArrayList<AuthorizationProcessedEventResponse> responses = new ArrayList<AuthorizationProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            AuthorizationProcessedEventResponse typedResponse = new AuthorizationProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.fee = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static FixedFeeSetEventResponse getFixedFeeSetEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(FIXEDFEESET_EVENT, log);
        FixedFeeSetEventResponse typedResponse = new FixedFeeSetEventResponse();
        typedResponse.log = log;
        typedResponse.fixedFee = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static List<PausedEventResponse> getPausedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(PAUSED_EVENT, transactionReceipt);
        ArrayList<PausedEventResponse> responses = new ArrayList<PausedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            PausedEventResponse typedResponse = new PausedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static PausedEventResponse getPausedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(PAUSED_EVENT, log);
        PausedEventResponse typedResponse = new PausedEventResponse();
        typedResponse.log = log;
        typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static List<DebtWriteOffProcessedEventResponse> getDebtWriteOffProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(DEBTWRITEOFFPROCESSED_EVENT, transactionReceipt);
        ArrayList<DebtWriteOffProcessedEventResponse> responses = new ArrayList<DebtWriteOffProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            DebtWriteOffProcessedEventResponse typedResponse = new DebtWriteOffProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static PaymentAccountSetEventResponse getPaymentAccountSetEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(PAYMENTACCOUNTSET_EVENT, log);
        PaymentAccountSetEventResponse typedResponse = new PaymentAccountSetEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.paymentAccount = (String) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static PaymentReceiverSetEventResponse getPaymentReceiverSetEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(PAYMENTRECEIVERSET_EVENT, log);
        PaymentReceiverSetEventResponse typedResponse = new PaymentReceiverSetEventResponse();
        typedResponse.log = log;
        typedResponse.paymentReceiver = (String) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static RefundAccountSetEventResponse getRefundAccountSetEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(REFUNDACCOUNTSET_EVENT, log);
        RefundAccountSetEventResponse typedResponse = new RefundAccountSetEventResponse();
        typedResponse.log = log;
        typedResponse.refundAccount = (String) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static List<FixedFeeSetEventResponse> getFixedFeeSetEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(FIXEDFEESET_EVENT, transactionReceipt);
        ArrayList<FixedFeeSetEventResponse> responses = new ArrayList<FixedFeeSetEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            FixedFeeSetEventResponse typedResponse = new FixedFeeSetEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.fixedFee = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static RefundProcessedEventResponse getRefundProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(REFUNDPROCESSED_EVENT, log);
        RefundProcessedEventResponse typedResponse = new RefundProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static RoleAdminChangedEventResponse getRoleAdminChangedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(ROLEADMINCHANGED_EVENT, log);
        RoleAdminChangedEventResponse typedResponse = new RoleAdminChangedEventResponse();
        typedResponse.log = log;
        typedResponse.role = (byte[]) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.previousAdminRole = (byte[]) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.newAdminRole = (byte[]) eventValues.getIndexedValues().get(2).getValue();
        return typedResponse;
    }

    public static RoleGrantedEventResponse getRoleGrantedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(ROLEGRANTED_EVENT, log);
        RoleGrantedEventResponse typedResponse = new RoleGrantedEventResponse();
        typedResponse.log = log;
        typedResponse.role = (byte[]) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.account = (String) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.sender = (String) eventValues.getIndexedValues().get(2).getValue();
        return typedResponse;
    }

    public static RoleRevokedEventResponse getRoleRevokedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(ROLEREVOKED_EVENT, log);
        RoleRevokedEventResponse typedResponse = new RoleRevokedEventResponse();
        typedResponse.log = log;
        typedResponse.role = (byte[]) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.account = (String) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.sender = (String) eventValues.getIndexedValues().get(2).getValue();
        return typedResponse;
    }

    public static SaveRefundProcessedEventResponse getSaveRefundProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(SAVEREFUNDPROCESSED_EVENT, log);
        SaveRefundProcessedEventResponse typedResponse = new SaveRefundProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static SecurityDelaySetEventResponse getSecurityDelaySetEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(SECURITYDELAYSET_EVENT, log);
        SecurityDelaySetEventResponse typedResponse = new SecurityDelaySetEventResponse();
        typedResponse.log = log;
        typedResponse.securityDelay = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static SettlementPeriodSetEventResponse getSettlementPeriodSetEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(SETTLEMENTPERIODSET_EVENT, log);
        SettlementPeriodSetEventResponse typedResponse = new SettlementPeriodSetEventResponse();
        typedResponse.log = log;
        typedResponse.settlementPeriod = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static List<PaymentAccountSetEventResponse> getPaymentAccountSetEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(PAYMENTACCOUNTSET_EVENT, transactionReceipt);
        ArrayList<PaymentAccountSetEventResponse> responses = new ArrayList<PaymentAccountSetEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            PaymentAccountSetEventResponse typedResponse = new PaymentAccountSetEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.paymentAccount = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static SettlementProcessedEventResponse getSettlementProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(SETTLEMENTPROCESSED_EVENT, log);
        SettlementProcessedEventResponse typedResponse = new SettlementProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        typedResponse.fee = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
        return typedResponse;
    }

    public static List<UnpausedEventResponse> getUnpausedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(UNPAUSED_EVENT, transactionReceipt);
        ArrayList<UnpausedEventResponse> responses = new ArrayList<UnpausedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            UnpausedEventResponse typedResponse = new UnpausedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static UnpausedEventResponse getUnpausedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(UNPAUSED_EVENT, log);
        UnpausedEventResponse typedResponse = new UnpausedEventResponse();
        typedResponse.log = log;
        typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static List<PaymentReceiverSetEventResponse> getPaymentReceiverSetEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(PAYMENTRECEIVERSET_EVENT, transactionReceipt);
        ArrayList<PaymentReceiverSetEventResponse> responses = new ArrayList<PaymentReceiverSetEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            PaymentReceiverSetEventResponse typedResponse = new PaymentReceiverSetEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.paymentReceiver = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static VerifiedBalanceIncreasedForEventResponse getVerifiedBalanceIncreasedForEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(VERIFIEDBALANCEINCREASEDFOR_EVENT, log);
        VerifiedBalanceIncreasedForEventResponse typedResponse = new VerifiedBalanceIncreasedForEventResponse();
        typedResponse.log = log;
        typedResponse.paymentAccount = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.increase = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    @Deprecated
    public static TangemBridgeProcessor load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new TangemBridgeProcessor(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static TangemBridgeProcessor load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new TangemBridgeProcessor(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static List<PendingRefundProcessedEventResponse> getPendingRefundProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(PENDINGREFUNDPROCESSED_EVENT, transactionReceipt);
        ArrayList<PendingRefundProcessedEventResponse> responses = new ArrayList<PendingRefundProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            PendingRefundProcessedEventResponse typedResponse = new PendingRefundProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static PendingRefundProcessedEventResponse getPendingRefundProcessedEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(PENDINGREFUNDPROCESSED_EVENT, log);
        PendingRefundProcessedEventResponse typedResponse = new PendingRefundProcessedEventResponse();
        typedResponse.log = log;
        typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
        typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public static TangemBridgeProcessor load(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return new TangemBridgeProcessor(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static TangemBridgeProcessor load(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new TangemBridgeProcessor(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static List<RefundAccountSetEventResponse> getRefundAccountSetEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(REFUNDACCOUNTSET_EVENT, transactionReceipt);
        ArrayList<RefundAccountSetEventResponse> responses = new ArrayList<RefundAccountSetEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RefundAccountSetEventResponse typedResponse = new RefundAccountSetEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.refundAccount = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static RemoteCall<TangemBridgeProcessor> deploy(Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider, String paymentReceiver_, String refundAccount_, String paymentAccountFactory_, String paymentToken_, BigInteger securityDelay_) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new Address(160, paymentReceiver_),
                new Address(160, refundAccount_),
                new Address(160, paymentAccountFactory_),
                new Address(160, paymentToken_),
                new Uint256(securityDelay_)));
        return deployRemoteCall(TangemBridgeProcessor.class, web3j, credentials, contractGasProvider, BINARY, encodedConstructor);
    }

    public static RemoteCall<TangemBridgeProcessor> deploy(Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider, String paymentReceiver_, String refundAccount_, String paymentAccountFactory_, String paymentToken_, BigInteger securityDelay_) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new Address(160, paymentReceiver_),
                new Address(160, refundAccount_),
                new Address(160, paymentAccountFactory_),
                new Address(160, paymentToken_),
                new Uint256(securityDelay_)));
        return deployRemoteCall(TangemBridgeProcessor.class, web3j, transactionManager, contractGasProvider, BINARY, encodedConstructor);
    }

    @Deprecated
    public static RemoteCall<TangemBridgeProcessor> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, String paymentReceiver_, String refundAccount_, String paymentAccountFactory_, String paymentToken_, BigInteger securityDelay_) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new Address(160, paymentReceiver_),
                new Address(160, refundAccount_),
                new Address(160, paymentAccountFactory_),
                new Address(160, paymentToken_),
                new Uint256(securityDelay_)));
        return deployRemoteCall(TangemBridgeProcessor.class, web3j, credentials, gasPrice, gasLimit, BINARY, encodedConstructor);
    }

    public static List<RefundProcessedEventResponse> getRefundProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(REFUNDPROCESSED_EVENT, transactionReceipt);
        ArrayList<RefundProcessedEventResponse> responses = new ArrayList<RefundProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RefundProcessedEventResponse typedResponse = new RefundProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    @Deprecated
    public static RemoteCall<TangemBridgeProcessor> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, String paymentReceiver_, String refundAccount_, String paymentAccountFactory_, String paymentToken_, BigInteger securityDelay_) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new Address(160, paymentReceiver_),
                new Address(160, refundAccount_),
                new Address(160, paymentAccountFactory_),
                new Address(160, paymentToken_),
                new Uint256(securityDelay_)));
        return deployRemoteCall(TangemBridgeProcessor.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, encodedConstructor);
    }

    public Flowable<AuthorizationChangeProcessedEventResponse> authorizationChangeProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getAuthorizationChangeProcessedEventFromLog(log));
    }

    public Flowable<AuthorizationChangeProcessedEventResponse> authorizationChangeProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(AUTHORIZATIONCHANGEPROCESSED_EVENT));
        return authorizationChangeProcessedEventFlowable(filter);
    }

    public static List<RoleAdminChangedEventResponse> getRoleAdminChangedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(ROLEADMINCHANGED_EVENT, transactionReceipt);
        ArrayList<RoleAdminChangedEventResponse> responses = new ArrayList<RoleAdminChangedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RoleAdminChangedEventResponse typedResponse = new RoleAdminChangedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.role = (byte[]) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.previousAdminRole = (byte[]) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.newAdminRole = (byte[]) eventValues.getIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<AuthorizationProcessedEventResponse> authorizationProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getAuthorizationProcessedEventFromLog(log));
    }

    public Flowable<AuthorizationProcessedEventResponse> authorizationProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(AUTHORIZATIONPROCESSED_EVENT));
        return authorizationProcessedEventFlowable(filter);
    }

    public Flowable<DebtWriteOffProcessedEventResponse> debtWriteOffProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getDebtWriteOffProcessedEventFromLog(log));
    }

    public static List<RoleGrantedEventResponse> getRoleGrantedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(ROLEGRANTED_EVENT, transactionReceipt);
        ArrayList<RoleGrantedEventResponse> responses = new ArrayList<RoleGrantedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RoleGrantedEventResponse typedResponse = new RoleGrantedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.role = (byte[]) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.account = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.sender = (String) eventValues.getIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<DebtWriteOffProcessedEventResponse> debtWriteOffProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(DEBTWRITEOFFPROCESSED_EVENT));
        return debtWriteOffProcessedEventFlowable(filter);
    }

    public Flowable<FixedFeeSetEventResponse> fixedFeeSetEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getFixedFeeSetEventFromLog(log));
    }

    public Flowable<FixedFeeSetEventResponse> fixedFeeSetEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(FIXEDFEESET_EVENT));
        return fixedFeeSetEventFlowable(filter);
    }

    public static List<RoleRevokedEventResponse> getRoleRevokedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(ROLEREVOKED_EVENT, transactionReceipt);
        ArrayList<RoleRevokedEventResponse> responses = new ArrayList<RoleRevokedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RoleRevokedEventResponse typedResponse = new RoleRevokedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.role = (byte[]) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.account = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.sender = (String) eventValues.getIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<PausedEventResponse> pausedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getPausedEventFromLog(log));
    }

    public Flowable<PausedEventResponse> pausedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(PAUSED_EVENT));
        return pausedEventFlowable(filter);
    }

    public Flowable<PaymentAccountSetEventResponse> paymentAccountSetEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getPaymentAccountSetEventFromLog(log));
    }

    public static List<SaveRefundProcessedEventResponse> getSaveRefundProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(SAVEREFUNDPROCESSED_EVENT, transactionReceipt);
        ArrayList<SaveRefundProcessedEventResponse> responses = new ArrayList<SaveRefundProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SaveRefundProcessedEventResponse typedResponse = new SaveRefundProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<PaymentAccountSetEventResponse> paymentAccountSetEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(PAYMENTACCOUNTSET_EVENT));
        return paymentAccountSetEventFlowable(filter);
    }

    public Flowable<PaymentReceiverSetEventResponse> paymentReceiverSetEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getPaymentReceiverSetEventFromLog(log));
    }

    public Flowable<PaymentReceiverSetEventResponse> paymentReceiverSetEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(PAYMENTRECEIVERSET_EVENT));
        return paymentReceiverSetEventFlowable(filter);
    }

    public static List<SecurityDelaySetEventResponse> getSecurityDelaySetEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(SECURITYDELAYSET_EVENT, transactionReceipt);
        ArrayList<SecurityDelaySetEventResponse> responses = new ArrayList<SecurityDelaySetEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SecurityDelaySetEventResponse typedResponse = new SecurityDelaySetEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.securityDelay = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<PendingRefundProcessedEventResponse> pendingRefundProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getPendingRefundProcessedEventFromLog(log));
    }

    public Flowable<PendingRefundProcessedEventResponse> pendingRefundProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(PENDINGREFUNDPROCESSED_EVENT));
        return pendingRefundProcessedEventFlowable(filter);
    }

    public Flowable<RefundAccountSetEventResponse> refundAccountSetEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getRefundAccountSetEventFromLog(log));
    }

    public static List<SettlementPeriodSetEventResponse> getSettlementPeriodSetEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(SETTLEMENTPERIODSET_EVENT, transactionReceipt);
        ArrayList<SettlementPeriodSetEventResponse> responses = new ArrayList<SettlementPeriodSetEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SettlementPeriodSetEventResponse typedResponse = new SettlementPeriodSetEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.settlementPeriod = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<RefundAccountSetEventResponse> refundAccountSetEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(REFUNDACCOUNTSET_EVENT));
        return refundAccountSetEventFlowable(filter);
    }

    public Flowable<RefundProcessedEventResponse> refundProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getRefundProcessedEventFromLog(log));
    }

    public Flowable<RefundProcessedEventResponse> refundProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(REFUNDPROCESSED_EVENT));
        return refundProcessedEventFlowable(filter);
    }

    public static List<SettlementProcessedEventResponse> getSettlementProcessedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(SETTLEMENTPROCESSED_EVENT, transactionReceipt);
        ArrayList<SettlementProcessedEventResponse> responses = new ArrayList<SettlementProcessedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SettlementProcessedEventResponse typedResponse = new SettlementProcessedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.card = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.transactionId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.fee = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<RoleAdminChangedEventResponse> roleAdminChangedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getRoleAdminChangedEventFromLog(log));
    }

    public Flowable<RoleAdminChangedEventResponse> roleAdminChangedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(ROLEADMINCHANGED_EVENT));
        return roleAdminChangedEventFlowable(filter);
    }

    public Flowable<RoleGrantedEventResponse> roleGrantedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getRoleGrantedEventFromLog(log));
    }

    public Flowable<RoleGrantedEventResponse> roleGrantedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(ROLEGRANTED_EVENT));
        return roleGrantedEventFlowable(filter);
    }

    public Flowable<RoleRevokedEventResponse> roleRevokedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getRoleRevokedEventFromLog(log));
    }

    public Flowable<RoleRevokedEventResponse> roleRevokedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(ROLEREVOKED_EVENT));
        return roleRevokedEventFlowable(filter);
    }

    public Flowable<SaveRefundProcessedEventResponse> saveRefundProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getSaveRefundProcessedEventFromLog(log));
    }

    public static List<VerifiedBalanceIncreasedForEventResponse> getVerifiedBalanceIncreasedForEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(VERIFIEDBALANCEINCREASEDFOR_EVENT, transactionReceipt);
        ArrayList<VerifiedBalanceIncreasedForEventResponse> responses = new ArrayList<VerifiedBalanceIncreasedForEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            VerifiedBalanceIncreasedForEventResponse typedResponse = new VerifiedBalanceIncreasedForEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.paymentAccount = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.increase = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Flowable<SaveRefundProcessedEventResponse> saveRefundProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(SAVEREFUNDPROCESSED_EVENT));
        return saveRefundProcessedEventFlowable(filter);
    }

    public Flowable<SecurityDelaySetEventResponse> securityDelaySetEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getSecurityDelaySetEventFromLog(log));
    }

    public Flowable<SecurityDelaySetEventResponse> securityDelaySetEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(SECURITYDELAYSET_EVENT));
        return securityDelaySetEventFlowable(filter);
    }

    public static List<VerifiedBalanceSetForEventResponse> getVerifiedBalanceSetForEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = staticExtractEventParametersWithLog(VERIFIEDBALANCESETFOR_EVENT, transactionReceipt);
        ArrayList<VerifiedBalanceSetForEventResponse> responses = new ArrayList<VerifiedBalanceSetForEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            VerifiedBalanceSetForEventResponse typedResponse = new VerifiedBalanceSetForEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.paymentAccount = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.verifiedBalance = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static VerifiedBalanceSetForEventResponse getVerifiedBalanceSetForEventFromLog(Log log) {
        EventValuesWithLog eventValues = staticExtractEventParametersWithLog(VERIFIEDBALANCESETFOR_EVENT, log);
        VerifiedBalanceSetForEventResponse typedResponse = new VerifiedBalanceSetForEventResponse();
        typedResponse.log = log;
        typedResponse.paymentAccount = (String) eventValues.getIndexedValues().get(0).getValue();
        typedResponse.verifiedBalance = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
        return typedResponse;
    }

    public Flowable<VerifiedBalanceSetForEventResponse> verifiedBalanceSetForEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getVerifiedBalanceSetForEventFromLog(log));
    }

    public Flowable<VerifiedBalanceSetForEventResponse> verifiedBalanceSetForEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(VERIFIEDBALANCESETFOR_EVENT));
        return verifiedBalanceSetForEventFlowable(filter);
    }

    public Flowable<SettlementPeriodSetEventResponse> settlementPeriodSetEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getSettlementPeriodSetEventFromLog(log));
    }

    public Flowable<SettlementPeriodSetEventResponse> settlementPeriodSetEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(SETTLEMENTPERIODSET_EVENT));
        return settlementPeriodSetEventFlowable(filter);
    }

    public Flowable<SettlementProcessedEventResponse> settlementProcessedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getSettlementProcessedEventFromLog(log));
    }

    public Flowable<SettlementProcessedEventResponse> settlementProcessedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(SETTLEMENTPROCESSED_EVENT));
        return settlementProcessedEventFlowable(filter);
    }

    public Flowable<UnpausedEventResponse> unpausedEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getUnpausedEventFromLog(log));
    }

    public Flowable<UnpausedEventResponse> unpausedEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(UNPAUSED_EVENT));
        return unpausedEventFlowable(filter);
    }

    public Flowable<VerifiedBalanceIncreasedForEventResponse> verifiedBalanceIncreasedForEventFlowable(EthFilter filter) {
        return web3j.ethLogFlowable(filter).map(log -> getVerifiedBalanceIncreasedForEventFromLog(log));
    }

    public Flowable<VerifiedBalanceIncreasedForEventResponse> verifiedBalanceIncreasedForEventFlowable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(VERIFIEDBALANCEINCREASEDFOR_EVENT));
        return verifiedBalanceIncreasedForEventFlowable(filter);
    }

    public RemoteFunctionCall<byte[]> AUTHORIZATION_PROCESSOR_ROLE() {
        final Function function = new Function(FUNC_AUTHORIZATION_PROCESSOR_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> BALANCE_VERIFIER_ROLE() {
        final Function function = new Function(FUNC_BALANCE_VERIFIER_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> DEBT_PROCESSOR_ROLE() {
        final Function function = new Function(FUNC_DEBT_PROCESSOR_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> DEFAULT_ADMIN_ROLE() {
        final Function function = new Function(FUNC_DEFAULT_ADMIN_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> FIXED_FEE_SETTER_ROLE() {
        final Function function = new Function(FUNC_FIXED_FEE_SETTER_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> PAUSER_ROLE() {
        final Function function = new Function(FUNC_PAUSER_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> PAYMENT_ACCOUNT_SETTER_ROLE() {
        final Function function = new Function(FUNC_PAYMENT_ACCOUNT_SETTER_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> PROPERTY_SETTER_ROLE() {
        final Function function = new Function(FUNC_PROPERTY_SETTER_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> REFUND_PROCESSOR_ROLE() {
        final Function function = new Function(FUNC_REFUND_PROCESSOR_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<byte[]> SETTLEMENT_PROCESSOR_ROLE() {
        final Function function = new Function(FUNC_SETTLEMENT_PROCESSOR_ROLE,
                List.of(),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<BigInteger> fixedFee() {
        final Function function = new Function(FUNC_FIXEDFEE,
                List.of(),
                List.of(new TypeReference<Uint256>() {
                }));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<String> getPaymentAccount(String card) {
        final Function function = new Function(FUNC_GETPAYMENTACCOUNT,
                List.of(new Address(160, card)),
                List.of(new TypeReference<Address>() {
                }));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<byte[]> getRoleAdmin(byte[] role) {
        final Function function = new Function(FUNC_GETROLEADMIN,
                List.of(new Bytes32(role)),
                List.of(new TypeReference<Bytes32>() {
                }));
        return executeRemoteCallSingleValueReturn(function, byte[].class);
    }

    public RemoteFunctionCall<String> getRoleMember(byte[] role, BigInteger index) {
        final Function function = new Function(FUNC_GETROLEMEMBER,
                Arrays.asList(new Bytes32(role),
                        new Uint256(index)),
                List.of(new TypeReference<Address>() {
                }));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<BigInteger> getRoleMemberCount(byte[] role) {
        final Function function = new Function(FUNC_GETROLEMEMBERCOUNT,
                List.of(new Bytes32(role)),
                List.of(new TypeReference<Uint256>() {
                }));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<TransactionReceipt> grantRole(byte[] role, String account) {
        final Function function = new Function(
                FUNC_GRANTROLE,
                Arrays.asList(new Bytes32(role),
                        new Address(160, account)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<Boolean> hasRole(byte[] role, String account) {
        final Function function = new Function(FUNC_HASROLE,
                Arrays.asList(new Bytes32(role),
                        new Address(160, account)),
                List.of(new TypeReference<Bool>() {
                }));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<TransactionReceipt> increaseVerifiedBalanceFor(String paymentAccount, BigInteger increase) {
        final Function function = new Function(
                FUNC_INCREASEVERIFIEDBALANCEFOR,
                Arrays.asList(new Address(160, paymentAccount),
                        new Uint256(increase)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> pause() {
        final Function function = new Function(
                FUNC_PAUSE,
                List.of(),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<Boolean> paused() {
        final Function function = new Function(FUNC_PAUSED,
                List.of(),
                List.of(new TypeReference<Bool>() {
                }));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<String> paymentAccountFactory() {
        final Function function = new Function(FUNC_PAYMENTACCOUNTFACTORY,
                List.of(),
                List.of(new TypeReference<Address>() {
                }));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<String> paymentReceiver() {
        final Function function = new Function(FUNC_PAYMENTRECEIVER,
                List.of(),
                List.of(new TypeReference<Address>() {
                }));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<String> paymentToken() {
        final Function function = new Function(FUNC_PAYMENTTOKEN,
                List.of(),
                List.of(new TypeReference<Address>() {
                }));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<TransactionReceipt> processAuthorization(String card, BigInteger transactionId, BigInteger amount, byte[] otp, BigInteger otpCounter, Boolean forced) {
        final Function function = new Function(
                FUNC_PROCESSAUTHORIZATION,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId),
                        new Uint256(amount),
                        new org.web3j.abi.datatypes.generated.Bytes16(otp),
                        new org.web3j.abi.datatypes.generated.Uint16(otpCounter),
                        new Bool(forced)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> processAuthorizationChange(String card, BigInteger transactionId, BigInteger amount) {
        final Function function = new Function(
                FUNC_PROCESSAUTHORIZATIONCHANGE,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId),
                        new Uint256(amount)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> processAuthorizationNoOtp(String card, BigInteger transactionId, BigInteger amount, Boolean forced) {
        final Function function = new Function(
                FUNC_PROCESSAUTHORIZATIONNOOTP,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId),
                        new Uint256(amount),
                        new Bool(forced)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> processPendingRefund(String card, BigInteger transactionId) {
        final Function function = new Function(
                FUNC_PROCESSPENDINGREFUND,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> processRefund(String card, BigInteger transactionId, BigInteger refundAmount) {
        final Function function = new Function(
                FUNC_PROCESSREFUND,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId),
                        new Uint256(refundAmount)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> processRefundCallback() {
        final Function function = new Function(
                FUNC_PROCESSREFUNDCALLBACK,
                List.of(),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> processSettlement(String card, BigInteger transactionId, BigInteger amount) {
        final Function function = new Function(
                FUNC_PROCESSSETTLEMENT,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId),
                        new Uint256(amount)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<String> refundAccount() {
        final Function function = new Function(FUNC_REFUNDACCOUNT,
                List.of(),
                List.of(new TypeReference<Address>() {
                }));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<TransactionReceipt> renounceRole(byte[] role, String callerConfirmation) {
        final Function function = new Function(
                FUNC_RENOUNCEROLE,
                Arrays.asList(new Bytes32(role),
                        new Address(160, callerConfirmation)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> revokeRole(byte[] role, String account) {
        final Function function = new Function(
                FUNC_REVOKEROLE,
                Arrays.asList(new Bytes32(role),
                        new Address(160, account)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> savePendingRefund(String card, BigInteger transactionId, BigInteger amount) {
        final Function function = new Function(
                FUNC_SAVEPENDINGREFUND,
                Arrays.asList(new Address(160, card),
                        new Uint256(transactionId),
                        new Uint256(amount)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<BigInteger> securityDelay() {
        final Function function = new Function(FUNC_SECURITYDELAY,
                List.of(),
                List.of(new TypeReference<Uint256>() {
                }));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<TransactionReceipt> setFixedFee(BigInteger fixedFee_) {
        final Function function = new Function(
                FUNC_SETFIXEDFEE,
                List.of(new Uint256(fixedFee_)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setPaymentAccount(String card, String paymentAccount) {
        final Function function = new Function(
                FUNC_SETPAYMENTACCOUNT,
                Arrays.asList(new Address(160, card),
                        new Address(160, paymentAccount)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setPaymentReceiver(String paymentReceiver_) {
        final Function function = new Function(
                FUNC_SETPAYMENTRECEIVER,
                List.of(new Address(160, paymentReceiver_)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setRefundAccount(String refundAccount_) {
        final Function function = new Function(
                FUNC_SETREFUNDACCOUNT,
                List.of(new Address(160, refundAccount_)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setSecurityDelay(BigInteger securityDelay_) {
        final Function function = new Function(
                FUNC_SETSECURITYDELAY,
                List.of(new Uint256(securityDelay_)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setSettlementPeriod(BigInteger settlementPeriod_) {
        final Function function = new Function(
                FUNC_SETSETTLEMENTPERIOD,
                List.of(new Uint256(settlementPeriod_)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setVerifiedBalanceFor(String paymentAccount, BigInteger verifiedBalance) {
        final Function function = new Function(
                FUNC_SETVERIFIEDBALANCEFOR,
                Arrays.asList(new Address(160, paymentAccount),
                        new Uint256(verifiedBalance)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<BigInteger> settlementPeriod() {
        final Function function = new Function(FUNC_SETTLEMENTPERIOD,
                List.of(),
                List.of(new TypeReference<Uint256>() {
                }));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<Boolean> supportsInterface(byte[] interfaceId) {
        final Function function = new Function(FUNC_SUPPORTSINTERFACE,
                List.of(new Bytes4(interfaceId)),
                List.of(new TypeReference<Bool>() {
                }));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<TransactionReceipt> unpause() {
        final Function function = new Function(
                FUNC_UNPAUSE,
                List.of(),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> writeOffDebt(String card, BigInteger amount) {
        final Function function = new Function(
                FUNC_WRITEOFFDEBT,
                Arrays.asList(new Address(160, card),
                        new Uint256(amount)),
                Collections.emptyList());
        return executeRemoteCallTransaction(function);
    }

    public static class AuthorizationChangeProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger transactionId;

        public BigInteger amount;

        public BigInteger fee;
    }

    public static class AuthorizationProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger transactionId;

        public BigInteger amount;

        public BigInteger fee;
    }

    public static class DebtWriteOffProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger amount;
    }

    public static class FixedFeeSetEventResponse extends BaseEventResponse {
        public BigInteger fixedFee;
    }

    public static class PausedEventResponse extends BaseEventResponse {
        public String account;
    }

    public static class PaymentAccountSetEventResponse extends BaseEventResponse {
        public String card;

        public String paymentAccount;
    }

    public static class PaymentReceiverSetEventResponse extends BaseEventResponse {
        public String paymentReceiver;
    }

    public static class PendingRefundProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger transactionId;

        public BigInteger amount;
    }

    public static class RefundAccountSetEventResponse extends BaseEventResponse {
        public String refundAccount;
    }

    public static class RefundProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger transactionId;

        public BigInteger amount;
    }

    public static class RoleAdminChangedEventResponse extends BaseEventResponse {
        public byte[] role;

        public byte[] previousAdminRole;

        public byte[] newAdminRole;
    }

    public static class RoleGrantedEventResponse extends BaseEventResponse {
        public byte[] role;

        public String account;

        public String sender;
    }

    public static class RoleRevokedEventResponse extends BaseEventResponse {
        public byte[] role;

        public String account;

        public String sender;
    }

    public static class SaveRefundProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger transactionId;

        public BigInteger amount;
    }

    public static class SecurityDelaySetEventResponse extends BaseEventResponse {
        public BigInteger securityDelay;
    }

    public static class SettlementPeriodSetEventResponse extends BaseEventResponse {
        public BigInteger settlementPeriod;
    }

    public static class SettlementProcessedEventResponse extends BaseEventResponse {
        public String card;

        public BigInteger transactionId;

        public BigInteger amount;

        public BigInteger fee;
    }

    public static class UnpausedEventResponse extends BaseEventResponse {
        public String account;
    }

    public static class VerifiedBalanceIncreasedForEventResponse extends BaseEventResponse {
        public String paymentAccount;

        public BigInteger increase;
    }

    public static class VerifiedBalanceSetForEventResponse extends BaseEventResponse {
        public String paymentAccount;

        public BigInteger verifiedBalance;
    }
}
